<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>String(字符串)类型</title>
    </head>
    <body>
        <!-- 字符串就是“人类的自然语言”
             字符串要用引号包裹，双引号或者单引号均可
                    typeof "ROC";   // string
                    typeof 'ROC';   // string
        -->

        <!-- 分清数字和字符串
             数字11和字符串'11'在语义上是不同的，前者表达一个数量，后者是一个文本
                    typeof 11;      // number
                    typeof '11';    // string
        -->

        <!-- 字符串的拼接
             加号可以用来拼接多个字符串
                    'imo' + 'oc'    // 'immoc'
        -->

        <!-- 字符串和变量的拼接
             要将一个变量的值“插入”到字符串中，要“斩断链接”
                    var year = 2022;
                    var str = '北京冬季奥运会在' + year + '年召开'；    // 北京冬季奥运会在2022年召开
        -->

        <script>
            var a = 10;
            var str = '我买了' + a + '个苹果';
            alert(str);

            // 一些时候需要使用空字符串，直接书写闭合的引号对即可
            // var str = '';    // string

            // 字符串的length属性表示字符串的长度
            //      '我喜欢JS'.length                  // 5
            //      '我喜欢JS，我也喜欢HTML'.length     // 14
            //      ''.length                          // 0


            // 字符串的常用方法
            // “方法”就是能够打点调用的函数，字符串有丰富的方法
            // 方法          功能
            // charAt()     得到指定位置字符
            // substring()  提取子串
            // substr()     提取子串
            // slice()      提取子串
            // toUpperCase  将字符串变为大写
            // toLowerCase  将字符串变为小写
            // indexOf()    检索字符串

            // 将字符串中的每个字符从0开始计算
            // charAt()方法
            // charAt()方法可以得到指定位置的字符
            //        '我喜欢JS，我也喜欢HTML'.charAt(0)      // '我'
            //        '我喜欢JS，我也喜欢HTML'.charAt(11)     // 'T'
            //        '我喜欢JS，我也喜欢HTML'.charAt(74)     // ''

            // substring()、substr()和slice()方法
            // substring()
            //      substring(a,b)方法得到从a开始到b结束（不包括b处）的子串
            //        '我喜欢JS，我也喜欢HTML'.substring(3,5)   // 'JS'
            //        '我喜欢JS，我也喜欢HTML'.substring(10,14) // 'HTML'
            //      substring(a,b)方法如果省略第二个参数，返回的子串会一直到字符串的结尾
            //        '我喜欢JS，我也喜欢HTML'.substring(6)     // '我也喜欢HTML'
            //      substring(a,b)中，a可以大于b，数字顺序将自动调整为小数在前
            //        '我喜欢JS，我也喜欢HTML'.substring(5,3)   // 'JS'
            // substr()
            //      substr(a,b)中，将得到从a开始的长度为b的子串
            //        '我喜欢JS，我也喜欢HTML'.substr(3,2)      // 'JS'
            //      substr(a,b)中，b可以省略，表示到字符串结尾
            //        '我喜欢JS，我也喜欢HTML'.substr(3)        // 'JS,我也喜欢HTML'
            //      substr(a,b)中，a可以是负数，表示倒数位置，b为长度
            //        '我喜欢JS，我也喜欢HTML'.substr(-4,2)     // 'HT'
            // slice()
            //      slice(a,b)方法得到从a开始到b结束（不包括b处）的子串
            //        '我喜欢JS，我也喜欢HTML'.slice(3,5)       // 'JS'
            //      slice(a,b)的参数a可以是负数
            //        '我喜欢JS，我也喜欢HTML'.slice(-4,-1)     // 'HTM'
            //      slice(a,b)中，参数a必须小于参数b
            //        '我喜欢JS，我也喜欢HTML'.slice(5,2)       //  ''
            // 对比总结
            // substring(a,b)和slice(a,b)功能基本一致，都是得到从a开始到b结束（不包括b）的子串，区别：
            //      1.substring()可以自动交换两个参数位置，而slice()不行
            //      2.slice()的参数a可以使负数，而substring()不行。
            // substr(a,b)中参数b是子串长度，而不是位置编号

            // toUpperCase() 转为大写
            //        'i love you'.toUpperCase();              // 'I LOVE YOU'
            // toLowerCase() 转为小写
            //        'IMOOC'.toLowerCase();                   // 'imooc'

            // indexOf()方法返回某个指定的字符串值在字符串中首次出现的位置
            // 如果要检索的字符串值没有出现，则该返回 -1
            //        'abcdeb'.indexOf('b')                    // 1
            //        'abcdeb'.indexOf('be')                   // 3
            //        'abcdeb'.indexOf('m')                    // -1
        </script>
    </body>
</html>